import sys

from PyQt5 import QtCore
from PyQt5.QtCore import QStringListModel
from PyQt5.QtGui import QStandardItemModel, QStandardItem, QFont, QBrush
from PyQt5.QtSql import QSqlTableModel
from PyQt5.QtWidgets import QWidget, QMessageBox, QFileSystemModel, QStyleFactory, QMainWindow, QGridLayout, \
    QVBoxLayout, QHeaderView, QTableWidgetItem
from PyQt5.QtCore import Qt #许鑫
from flight_plan_ui.flight_plan_main_window_ui  import Ui_flightPlanMain
from flight_plan_SQL import sql_information



class FlightPlanMainWindow(QMainWindow, Ui_flightPlanMain):
    def __init__(self, parent=None):
        super(FlightPlanMainWindow, self).__init__(parent)
        self.setupUi(self)

        self.showMaximized() ##设置窗口最大化展示
        sql = sql_information() ##创建数据库对象
        ###关于subject_test_points——tableView的操作 begin####
        # 生成一个四行两列的模型
        self.model = QStandardItemModel(20, 12)
        # 设置水平方向两个头标签文本内容
        self.model.setHorizontalHeaderLabels(['序号', '高度','速度','重量','重心','襟/缝翼','起落架',
                                              '发动机推力','飞控模式','执行架机','试验点状态','执行任务单号'])
        self.tableView.setModel(self.model)
        self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)  # 所有列自动拉伸，充满界面
        self.tableView.verticalHeader().hide()

        sub = sql.query_data(
            'SELECT test_point_id,altitude,speed,weight,center_of_gravity,flaps_slats,landing_gear,engine_thrust,flight_control_mode,aircraf_name,test_point_status,task_list_no '
            'FROM flight_plan.test_point,flight_plan.task_list_no,flight_plan.aircraft '
            'where test_point.aircraft_id=aircraft.aircraft_id and test_point.task_list_no_id=task_list_no.task_list_no_id')
        self.write_data(sub)
        ###end####

        ###关于aircraft_limit_table——tableView的操作 begin####
        # 生成一个四行两列的模型
        self.mode2 = QStandardItemModel(20, 5)
        # 设置水平方向两个头标签文本内容
        self.mode2.setHorizontalHeaderLabels(['序号', 'ATA章节','系统名称','限制条件','架机'])
        self.tableView_2.setModel(self.model)
        self.tableView_2.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)  # 所有列自动拉伸，充满界面
        self.tableView_2.verticalHeader().hide()


        sub = sql.query_data(
            'SELECT limit_id,ATA_chapter,system_name,limit_factor,aircraf_name FROM flight_plan.`limit`,flight_plan.aircraft where limit.aircraft_id=aircraft.aircraft_id')
        self.write_data2(sub)
        ###end####

        ###关于production_constraint——tableView的操作 begin####
        # # 生成一个四行两列的模型
        self.model3 = QStandardItemModel(20, 6)
        # 设置水平方向两个头标签文本内容
        self.model3.setHorizontalHeaderLabels(['序号','试飞科目', '计划实施时间（日期）','未执行AO需要时长（天）','AO计划完成时间（日期）','影响时长（可正负/天）'])
        self.tableView_3.setModel(self.model3)
        self.tableView_3.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)  # 所有列自动拉伸，充满界面
        self.tableView_3.verticalHeader().hide()

        sub = sql.query_data(
            'SELECT subject_id,subject_name,plan_implementation_time,time_required_for_AO_not_executed,AO_plan_completion_time,impact_duration FROM flight_plan.subject')
        self.write_data3(sub)
        # ###end####
        #
        # ###关于fault_table_constraint——tableView的操作 begin####
        # # 生成一个四行两列的模型
        self.model4 = QStandardItemModel(20, 5)
        # 设置水平方向两个头标签文本内容
        self.model4.setHorizontalHeaderLabels(['序号', '试飞科目','FITO','FR','影响科目的逻辑关系'])
        self.tableView_4.setModel(self.model4)
        self.tableView_4.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)  # 所有列自动拉伸，充满界面
        self.tableView_4.verticalHeader().hide()
        sub = sql.query_data(
            'SELECT subject_id,subject_name,FITO,FR,affect_the_logical_relationship_of_subjects FROM flight_plan.subject,flight_plan.fito,flight_plan.fr where fito.FITO_id=subject.FITO_id and fr.FR_id=subject.FR_id')
        self.write_data4(sub)

        ###end####


    ###将数据写入表格 许鑫 2021/4/15##############3##########
    def write_data(self,sub_list):
        for i in range(len(sub_list)):  # 将数据写入表格
            for j in range(12):
                newItem = QStandardItem(str(sub_list[i][j]))
                self.model.setItem(i, j, newItem)
                self.tableView.setModel(self.model)
                newItem.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
                newItem.setFont(QFont('Microsoft YaHei', 10, QFont.Black))

    def write_data2(self,sub_list):
        for i in range(len(sub_list)):  # 将数据写入表格
            for j in range(5):
                newItem = QStandardItem(str(sub_list[i][j]))
                self.mode2.setItem(i, j, newItem)
                self.tableView_2.setModel(self.mode2)
                newItem.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
                newItem.setFont(QFont('Microsoft YaHei', 10, QFont.Black))

    def write_data3(self,sub_list):
        for i in range(len(sub_list)):  # 将数据写入表格
            for j in range(6):
                newItem = QStandardItem(str(sub_list[i][j]))
                self.model3.setItem(i, j, newItem)
                self.tableView_3.setModel(self.model3)
                newItem.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
                newItem.setFont(QFont('Microsoft YaHei', 10, QFont.Black))

    def write_data4(self,sub_list):
        for i in range(len(sub_list)):  # 将数据写入表格
            for j in range(5):
                newItem = QStandardItem(str(sub_list[i][j]))
                self.model4.setItem(i, j, newItem)
                self.tableView_4.setModel(self.model4)
                newItem.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
                newItem.setFont(QFont('Microsoft YaHei', 10, QFont.Black))



